package state_pattern.concrete;

import state_pattern.Role;
import state_pattern.State;

/**
 * @author 申书航
 * @version 1.0
 *
 * HurtState类表示角色的受伤状态，继承自State类。
 */
public class HurtState extends State {

    private Role sender;

    /**
     * 构造函数，用于初始化HurtState对象。
     *
     * @param role 当前角色
     * @param sender 攻击者角色
     */
    public HurtState(Role role, Role sender) {
        super(role);
        this.sender = sender;
    }

    /**
     * 角色进入受伤状态时的操作。
     */
    @Override
    public void onEnter() {
        System.out.println(role.getName() + "进入了受伤状态");
    }

    /**
     * 执行受伤状态的具体行为，包括计算剩余生命值和状态转换。
     */
    @Override
    public void execute() {
        int restHp = role.getHp() - sender.getAttack();
        restHp = restHp > 0 ? restHp : 0;
        role.setHp(restHp);
        System.out.println(role.getName() + "受到" + sender.getName()
                    + "的攻击，剩余生命值：" + role.getHp());
        if (restHp == 0) {
            role.changeState(new DeadState(role));
        }
        else {
            role.changeState(new StandState(role));
        }
    }
}

